package com.techbh.ridecall;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.util.Log;

public class EntidadeAlerta {

	public String tel = "";
	public String msg = "";
	public String metodo = "chamada";
	public String local = "";//endereco
	public double lat = 0;
	public double lng = 0;
	public float raio = 0;
	public long validade = 0;
	SharedPreferences config;
	
	public EntidadeAlerta(Context ctx){
		reset();
		
		//Obter alguns valores da configuração (se estiver implementada)
		config = PreferenceManager.getDefaultSharedPreferences(ctx);
	}
	
	public void reset(){
		this.lat = 0;
		this.lng = 0;
		this.raio = 0;
		this.validade = 0;
		this.metodo = "chamada";
		this.msg = "Estou chegando...";
		this.tel = "";
	}
	
	
	//TODO ler a configuração para definir qual intent
	//TODO acrescentar suporte a chamada + sms 
	public Intent getIntent(Context ctx){
		Intent i = null;
		Uri data = null;
		String action = "";
		
		metodo = config.getString("cfg_metodo", "chamada2");
		msg = config.getString("cfg_texto_sms", "Estou chegando...");
		Log.d("RideCall", "Metodo configurado: " + metodo);

		if(metodo.equals("chamada")){
			action = "PROXIMITY_ALERT_CALL";
			data = Uri.parse("tel:" + tel);

		} else if (metodo.equals("chamada+sms")){
			action = "PROXIMITY_ALERT_CALL_SMS";
			data = Uri.parse("tel:" + tel);

		} else if (metodo.equals("sms")){
			action = "PROXIMITY_ALERT_SMS";
			data = Uri.parse("tel:" + tel);

		} else {
			//Qual seria esse método ?
			action = "PROXIMITY_ALERT_CALL";
			// TODO sms: ou smsto: ? 
			data = Uri.parse("sms:" + tel);
		}

		Log.d("RideCall", "Gerando Intent com os dados");
		Log.d("RideCall", "Action: " + action);
		Log.d("RideCall", "Data:" + data);
		
		i = new Intent(action, data);

		if(metodo == "chamada"){
			//Colocar os extras de: duração, viva-voz, atendimento, ...

		} else if (metodo == "chamada+sms"){
			//Colocar os extras de: duração, viva-voz, atendimento, ...
			i.putExtra("msg", msg);
			
		} else {
			i.putExtra("msg", msg);
			
		}

		//O sistema irá colocar automaticamente o extra KEY_PROXIMITY_ENTERING no retorno do intent

		return i;
	}
	
	public PendingIntent getPendingIntent(Context ctx){
		PendingIntent pi = null;
		
		//0 = cria independente de outros PendingIntents já existirem
		int flags = 0;
		
		//flags = PendingIntent.FLAG_CANCEL_CURRENT;
		
		//executa somente 1a vez, não tem nem a 'saida' de proximidade
		flags |= PendingIntent.FLAG_ONE_SHOT;
		
		//Atualiza o PendingIntent se o usuário ainda está na tela
		flags |= PendingIntent.FLAG_UPDATE_CURRENT;
		
		int requestCode = 0;
		
		Intent i = this.getIntent(ctx); 
		pi = PendingIntent.getBroadcast(ctx, requestCode, i, flags);

		return pi;
	}
	
	
	//Verifica se o PendingIntent para o contato e local já foi criado
	public boolean existPendingIntent(Context ctx){
		PendingIntent pi = null;
		
		int requestCode = 0;
		
		int flags = PendingIntent.FLAG_NO_CREATE;
		
		//Adicionando esse flag auxilia a descobrir que o PI já foi registrado ?
		//Atualiza o PendingIntent se o usuário ainda está na tela
		//flags |= PendingIntent.FLAG_UPDATE_CURRENT;
		
		Intent i = this.getIntent(ctx); 
		pi = PendingIntent.getBroadcast(ctx, requestCode, i, flags);
		
		if(pi == null){
			//Não existia um PendingIntent criado
			return false;
		} else {
			//Existia um PendingIntent já criado
			return true;
		}
	}
	
	
	
	public void parseLatLng(String latlng){
		String coord[];
		
		this.local = latlng;
		
		lat = 0;
		lng = 0;
		try {
			coord = latlng.split(",");
			this.lat = Double.valueOf(coord[0]);
			this.lng = Double.valueOf(coord[1]);
			
			if(lat == -0.0){
				lat = 0.0;
			}
			if(lng == -0.0){
				lng = 0.0;
			}
		} catch (NullPointerException e){
		} catch (NumberFormatException e){
		} catch (ArrayIndexOutOfBoundsException e){
		}
	}
	
}
